/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package czat;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ConcurrentHashMap;

/**

 @author zztbak01
 */
public class SerwerCzatu extends Thread {

	public ServerSocket serverSocket;
	public ConcurrentHashMap<String, WatekSerweraDlaKlienta> mapa;

	public SerwerCzatu() {
		System.out.println("Startuje serwer czatu");
		try {
			serverSocket = new ServerSocket(StaticPorts.ServerPort);
			mapa = new ConcurrentHashMap<String, WatekSerweraDlaKlienta>();
		} catch (IOException ex) {
		}
	}

	@Override
	public void run() {
		while (true) {
			try {
				Socket socket = serverSocket.accept();
				WatekSerweraDlaKlienta watek = new WatekSerweraDlaKlienta(socket, this);
				if (mapa.keySet().contains(watek.login)) {
					watek.wyslij("Wybierz inny login");
					continue;
				}
				if (watek.login.contains(";")) {
					watek.wyslij("Login nie może zawierać znaku ;");
					continue;
				}
				watek.wyslij("OK");

				for (String login : mapa.keySet()) {
					watek.wyslij("ADD;" + login);
				}
				send("ADD", "ALL", watek.login, "SYSTEM");
				mapa.put(watek.login, watek);
				System.out.println("Klient polaczony: " + watek.login);
			} catch (Exception ex) {
			}
		}
	}

	public static void main(String[] args) {
		new SerwerCzatu().start();
	}

	void clientDisconnected(String login) {
		mapa.remove(login);
		System.out.println("Klient rozlaczony: " + login);
		send("REMOVE", "ALL", login, "SYSTEM");
	}

	void send(String sender, String user, String text, String typ) {
		if (typ.equals("SYSTEM")) {
			typ = "";
		} else {
			typ += ";";
		}
		if (user.equals("ALL")) {
			for (WatekSerweraDlaKlienta watek : mapa.values()) {
				if (!sender.equals(watek.login)) {
					watek.wyslij(typ + sender + ";" + text);
				}
			}
		} else {
			WatekSerweraDlaKlienta watek = mapa.get(user);
			if (watek != null) {
				watek.wyslij(typ + sender + ";" + text);
			}
		}
	}
}
